// 创建管理员账户脚本
// 运行方式: node scripts/create-admin.js

const mysql = require('mysql2/promise');
const bcrypt = require('bcryptjs');
require('dotenv').config({ path: '.env.local' });

// 管理员信息
const ADMIN_USERNAME = 'admin';
const ADMIN_PASSWORD = 'Aoshu.2025';
const ADMIN_EMAIL = 'admin@math-academy.local';
const ADMIN_DISPLAY_NAME = '系统管理员';

async function createAdmin() {
  console.log('🔧 开始创建管理员账户...\n');

  const config = {
    host: process.env.DB_HOST || 'localhost',
    port: parseInt(process.env.DB_PORT || '3306'),
    user: process.env.DB_USER || 'root',
    password: process.env.DB_PASSWORD || '',
    database: process.env.DB_NAME || 'math_academy',
  };

  try {
    // 连接数据库
    console.log('📡 连接到数据库...');
    const connection = await mysql.createConnection(config);
    console.log('✅ 数据库连接成功\n');

    // 检查管理员是否已存在
    console.log('🔍 检查管理员账户是否存在...');
    const [existingUsers] = await connection.execute(
      'SELECT id, username FROM users WHERE username = ?',
      [ADMIN_USERNAME]
    );

    if (existingUsers.length > 0) {
      console.log('⚠️  管理员账户已存在！');
      console.log(`   用户名: ${ADMIN_USERNAME}`);
      console.log(`   用户ID: ${existingUsers[0].id}\n`);
      
      // 询问是否更新密码
      console.log('💡 如果需要重置密码，请手动删除该用户后重新运行此脚本\n');
      await connection.end();
      return;
    }

    // 加密密码
    console.log('🔐 加密管理员密码...');
    const passwordHash = await bcrypt.hash(ADMIN_PASSWORD, 10);
    console.log('✅ 密码加密完成\n');

    // 创建管理员账户
    console.log('👤 创建管理员账户...');
    const [result] = await connection.execute(
      `INSERT INTO users (username, password_hash, email, display_name, role, is_active)
       VALUES (?, ?, ?, ?, 'admin', TRUE)`,
      [ADMIN_USERNAME, passwordHash, ADMIN_EMAIL, ADMIN_DISPLAY_NAME]
    );

    const adminId = result.insertId;
    console.log('✅ 管理员账户创建成功\n');

    // 显示管理员信息
    console.log('═══════════════════════════════════════');
    console.log('🎉 管理员账户创建完成！');
    console.log('═══════════════════════════════════════');
    console.log(`用户ID:   ${adminId}`);
    console.log(`用户名:   ${ADMIN_USERNAME}`);
    console.log(`密码:     ${ADMIN_PASSWORD}`);
    console.log(`邮箱:     ${ADMIN_EMAIL}`);
    console.log(`角色:     管理员 (admin)`);
    console.log('═══════════════════════════════════════\n');

    console.log('💡 重要提示:');
    console.log('   1. 请妥善保管管理员密码');
    console.log('   2. 首次登录后建议修改密码');
    console.log('   3. 不要将密码分享给他人\n');

    console.log('🚀 下一步:');
    console.log('   1. 启动应用: npm run dev');
    console.log('   2. 访问登录页面: http://localhost:3000/auth/login');
    console.log(`   3. 使用管理员账户登录: ${ADMIN_USERNAME} / ${ADMIN_PASSWORD}\n`);

    await connection.end();
  } catch (error) {
    console.error('\n❌ 创建管理员账户失败!\n');
    console.error('错误信息:', error.message);
    
    if (error.code === 'ECONNREFUSED') {
      console.log('\n💡 解决方案:');
      console.log('   1. 确保MySQL服务正在运行');
      console.log('   2. 检查.env.local中的数据库配置\n');
    } else if (error.code === 'ER_BAD_DB_ERROR') {
      console.log('\n💡 解决方案:');
      console.log('   1. 先创建数据库: CREATE DATABASE math_academy;');
      console.log('   2. 运行初始化脚本: mysql -u root -p math_academy < database/mysql-init.sql\n');
    } else if (error.code === 'ER_NO_SUCH_TABLE') {
      console.log('\n💡 解决方案:');
      console.log('   1. 运行数据库初始化脚本');
      console.log('   2. mysql -u root -p math_academy < database/mysql-init.sql\n');
    }
    
    process.exit(1);
  }
}

// 运行脚本
createAdmin()
  .then(() => {
    console.log('✅ 脚本执行完成');
    process.exit(0);
  })
  .catch((error) => {
    console.error('❌ 未预期的错误:', error);
    process.exit(1);
  });
